/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package WebServices;

import DataTypes.DataGrupo;
import DataTypes.DataUsuario;
import Hndlr.HndlrGrupo;
import Hndlr.HndlrUsuario;
import Interfaces.ICtrlModifMiembrosGrupo;
import enums.enumRol;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.logging.Logger;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;
import javax.jws.soap.SOAPBinding.Style;
import javax.xml.ws.Endpoint;
import objetos.Rol;
import objetos.Usuario;

/**
 *
 * @author Jota
 */


@WebService
@SOAPBinding(style = Style.RPC, parameterStyle = ParameterStyle.WRAPPED)

public class CtrlModifMiembrosGrupoWS {
    
    
    
        private Endpoint endpoint = null;
    private Logger log = Logger.getLogger(CtrlModifMiembrosGrupoWS.class.getName());

    
    @WebMethod(exclude = true)
    public void publicar() {
        Propiedades propiedades = Propiedades.getInstance();
        String nomCtrl = "CtrlModificarMiembrosGrupo";
        String camino = "http://" + propiedades.getServer() + ":" + propiedades.getPuerto() + "/" + nomCtrl;
        log.info("publicando el endpoint "+nomCtrl);
        endpoint = Endpoint.publish(camino, this);
        log.info("Endpoint "+nomCtrl+" publicado en " + camino);
    }
    
       @WebMethod(exclude = true)
    public Endpoint getEndpoint() {
        return endpoint;
    }

     @WebMethod
    public void agregarMiembroGrupo(@WebParam(name = "nomGrupo")String nomGrupo,@WebParam(name = "claveUsuario")String claveUsuario){
        HndlrUsuario hUsu = HndlrUsuario.getInstance();
        Usuario usr = hUsu.obtenerUsuario(claveUsuario);
        
        HndlrGrupo hGrupo = HndlrGrupo.getInstance();
        Rol r = new Rol(usr, enumRol.PARTICIPANTE);
        hGrupo.agregarUsuarioGrupo(r,nomGrupo);
    }
    
    @WebMethod
    public DataGrupo[] listarGrupos(){
        
        HndlrGrupo HGr = HndlrGrupo.getInstance();
        ArrayList<DataGrupo> listG = HGr.listarGrupos();
        int tam = listG.size();
        DataGrupo[] dg = new DataGrupo[tam];
        int i = 0;
        Iterator<DataGrupo> it = listG.iterator();
        while (it.hasNext()){
            
            dg[i] = it.next();
            i++;
        }
        
        
        return dg;
    }
    
    @WebMethod
    public boolean PerteneceMiembroAgrupo(@WebParam(name = "mailUsr")String mailUsr,@WebParam(name = "nomGrupo") String nomGrupo){
        
        HndlrGrupo hGr = HndlrGrupo.getInstance();
        
        return  hGr.PerteneceMiembroAgrupo(mailUsr, nomGrupo);
        
    }
    
    @WebMethod
    public DataUsuario[] listarDusuariosGrupo(@WebParam(name = "nomGrupo")String nomGrupo){
        
        ArrayList<DataUsuario> lista = new ArrayList<DataUsuario>();
        
        HndlrGrupo hGrupo = HndlrGrupo.getInstance();
        ArrayList<Rol> usr = hGrupo.obtenerGrupo(nomGrupo).getUsr();
        Iterator<Rol> itera = hGrupo.obtenerGrupo(nomGrupo).getUsr().iterator();
        int tam = usr.size();
        
        DataUsuario [] dlis = new DataUsuario[tam];
        
        int i = 0;
        while (itera.hasNext()){
            
            DataUsuario du = itera.next().getUsr().getDusuario();
            dlis[i] = du;
            i++;
            
        }
        
        return dlis;
    }
        
}
